- 지침 요약
- 지침 1. 적절한 대체 텍스트 제공
- 지침2. 자막 제공
- 지침3. 색에 무관한 콘텐츠 인식
- 지침4. 명확한 지시사항 제공
- 지침5. 텍스트 콘텐츠의 명도대비
- 지침6. 자동 재생 금지
- 지침7. 콘텐츠간의 구분
- 지침8. 키보드 사용 보장
- 지침9. 초점 이동
- 지침10. 조작기능
- 지침11. 응답시간 조절
- 지침12. 정지 기능 제공
- 지침13. 깜빡임과 번쩍임 사용 제한
- 지침14. 반복 영역 건너뛰기
- 지침15. 제목 제공
- 지침16. 적절한 링크 텍스트
- 지침17. 기본 언어 표시
- 지침18. 사용자 요구에 따른 실행
- 지침19. 콘텐츠의 선형 구조
- 지침20. 표의 구성
- 지침21. 레이블 정보 제공
- 지침22. 오류 정정
- 지침23. 마크업 오류 방지
- 지침24. 웹 애플리케이션 접근성 준수
- 공부한 자료
- 같이 보면 좋은 글
이미지 등 텍스트가 아닌 요소를 이용시 그 의미나 용도를 동일하게 인식할 수 있도록, 간단 명료한 대체 텍스트를 제공한다.
- 대체텍스트를 제공함으로써 검색어에도 영향을 준다.
- 이미지
- alt 속성을 제공하지 않거나
“사진 이미지”
등 아무 의미 없는 대체텍스트를 재공하는 경우- → 산속 나무에서 고로쇠 약수를 두명의 사람들이 담고 있는 모습
- 시각 장애인 분들은 더 상세한 설명을 선호하지만, 개발자들의 리소스를 생각하여 적당히 간단 명료하면 된다.
- alt 속성을 제공하지 않거나
- image of text(텍스트를 이미지로 제공 - 국제 표준에는 금지하고 있지만 국내에는 아직 존재)
- 위 경우 텍스트와 동등한 내용으로 대체텍스트를 제공해야 함
죄측메뉴_
등 불필요한 prefix를 넣지 않는다.- ~이미지, ~버튼, ~메뉴 등 불필요한 정보는 대체 텍스트로 제공하지 않는다.
- 약도
- 약도는 최소한의 정보만 제공
- 꾸밈요소
- 꾸밈 이미지, 구분선 등은 고의로 인지가 안되도록 구현해야 함.
- 배경이미지로 처리하거나,
alt=""
처리- alt 속성이 아예 없는 경우, 파일명을 읽는다. 그러므로 빈 스트링을 줘야 한다.
- 자동가입방지문자
- 대체텍스트로 자동가입방지 코드를 제공하면 안된다.
- 자동가입방지 코드 여부를 알려주고 실제 코드는 음성으로 들려주거나 문자메시지로 전송
- 썸네일
- a태그 안에 텍스트와 함께 있는 경우 alt를 빈 스트링으로 넣는다
- 그렇지 않은 경우 의미없는 단어 보다는 글 제목을 alt 에 넣어준다.
- 기호/부호
- 기호/부호의 용도나 목적을 대체 텍스트로 제공한다.
- 별점의 경우 5개의 별 각각마다 이미지로 주지 않고, 1-10점을 나타내는 별들을 하나의 이미지로 주어야 한다.
10점 만점에 5점
- 리스트
- 순위가 있는 경우 ul 대신 ol
- 표를 이미지로 제공하는 경우 똑같은 자리에 똑같은 표를 마크업 하여 제공
- 영상, 음성 등 멀티미디어 콘텐츠를 이해할 수 있도록 대체수단을 제공해야 한다.
- 자막, 전체 원고, 대본, 수어 등
- 자막은 일반인들에게도 시끄러운 환경이나 오디오 재생이 어려운 환경에서도 도움이 된다.
- 자막
- 배경음악만 제공하는 영상의 경우 어떤 콘텐츠인지 알 수 있도록 텍스트로 제공한다.
- 영상 내용과 자막은 일치해야 한다. 내용을 요약하지 않는다.
- 자막을 끄고 켤 수 있으면 좋다.
- 효과음에 대한 자막 제공 (e.g.
남자가 기침하는 소리
)
- 음성 정보
- 자막은 청각장애인을 위한 것이지만, 영상 내에 음성 없이 텍스트 정보만 표시되는 경우도 존재한다.
- 이 경우 시각 장애인은 인지할 수 없기 때문에 나레이션 등의 음성 정보도 제공해야 한다.
- 수어
- 자막과 수어는 겹치지 않게 제공한다.
- 녹화된수어와 실시간 수어가 겹치지 않게 제공한다.
- 수어 영상의 화질은 알아 볼 수준으로 제공한다.
- 수어 통역사가 같이 무대에 있는 경우, 영상 전환시 수어 통역사가 보이지 않는 경우를 주의한다. 우측 하단에 따로 보여주는게 제일 좋다.
콘텐츠는 색에 관계 없이 인식 될 수 있어야 한다.
- 흑백모드, 고대비모드(저시력 시각장애인), 색맹 사용자가 인식할 수 있도록 콘텐츠를 제공해야 한다.
- 도표
- 범례에 색을 제공할 때에는 색 뿐 아니라 패턴도 제공해야 한다.
- 색 구분이 어려운 도표의 경우 텍스트를 함께 제공한다.
- 색 구분과 텍스트 제공이 모두 어려운 경우 하단에 같은 내용의 도표를 함께 제공한다.
- 네비게이션
- 페이지 네비게이션의 현재 페이지를 표시하는 경우 텍스트 색상으로만 구분하지 않고, 배경색을 반전시키거나 모양을 다르게 한다.
- 사진 슬라이드의 경우 점 네비게이션을 타원으로 넓게 주거나 아웃라인 표시
- 현재 페이지를 숫자로 표시
- 체크박스
- 체크된 요소를 색상만 변경하지 말고 음영을 준다. 체크되지 않은 요소에 옅은 회색의 체크를 넣지 않는다.
- 별점
- 노란색 별과 옅은 회색 별을 사용하는 경우 점수도 함께 표시한다.
- 일정표 달력
- 색상 점 안에 약어 또는 패턴 표기
지시사항은 모양, 크기, 위치, 방향, 색, 소리등에 관계 없이 인식될 수 있어야 한다.
- 단일 감각에만 의존하는 방법으로 제공하면 안된다.
- 사례
- 위치 의존 지시사항
- 이 필드는 필수항목입니다. → 아이디는 필수항목입니다.
- 방향 의존 지시사항
- 위 항목을 입력하세요. → 위의 이름, 이메일 주소를 입력하세요.
- 시각 의존 지시사항
- 보이는 숫자를 입력하세요. → 자동가입방지 숫자를 입력하세요.
- 위치 의존 지시사항
텍스트 콘텐츠와 배경간의 명도대비는 4.5:1 이상이어야 한다.
- 저시력 장애인, 색각 장애인, 노인 대상
- 노란 배경에 흰 글자를 사용하는 경우 잘 보이지 않는다.
- 글자를 검정으로 바꾸거나, 배경을 어두운 색으로 바꾸어서 대비를 줘야 한다.
- 탭콘텐츠나 메뉴 선택시 글자 색상만 바뀌는 경우 색상이 배경색과 명도 대비가 약할 수 있다.
- placeholder 도 명도대비 준수 대상이다.
- 규정상, 확대가 가능하면 3:1 까지도 가능하다. 그러나 웬만하면 4.5:1 비율을 권장하고 있다.
자동으로 재생되는 배경음을 사용하지 않아야 한다. 배경음으로 인해 스크린리더 이용 고객이 콘텐츠를 인식하고 사용하는데에 방해 받지 않아야 한다.
- 3초 미만 재생되는 경우는 예외조항에 포함된다.
- 배경음을 제공하고싶다면 정지된 상태에서 제공해주고 사용자가 필요할 때 켤 수 있게 한다.
이웃한 콘텐츠는 시각적으로 구분되도록 제공한다.
- 텍스트가 겹쳐서 인식이 어려운 경우가 없게 한다.
모든 기능은 키보드만으로 사용할 수 있어야 한다.
- 지체장애인, 뇌성마비 장애인 뿐 아니라 시각장애인도 키보드에 전적으로 의존하고 있다.
- 초점 적용 가능 요소 위반
- input, a, button 태그 대신 div 태그에 관련 기능들을 구현하는 경우
onfocus="this.blur()"
로 이벤트를 등록하는 경우
키보드를 이용한 초점 이동은 논리적이어야 하며, 시각적으로 구별할 수 있어야 한다.
- 사용자 입력간 자연스러운 초점 이동이 돼야 한다.
- 이 과정에서 콘텐츠 조작이 불가능한 상태가 되거나, 갑작스러운 페이지 전환이 일어나면 안된다.
- 포커싱 되어있는 콘텐츠는 시각장애인, 저시력 장애인들이 구별할 수 있어야 한다.
- 비장애인들이라도 마우스를 쓸 수 없는 사람이나, 상황 등에서도 유용하다.
- 사례
- 스타일 초기화시 outline: none 속성을 주는 경우가 있는데, 이는 지침을 위반한 것이다.
- 포커싱 된 모습과 일반 상태의 모습이 차이가 크지 않은 경우 장애인들이 구별하기 어려울 수 있다.
웹페이지에서 제공하는 모든 이웃한 컨트롤은 개별적으로 선택, 사용할 수 있도록 충분한 크기로 제공해야한다.
- 크기
- 클릭 가능한 영역 - 대각선 길이 6mm 이상
- 픽셀 단위로 개발하기 때문에 mm 단위는 애매하다.
- W3C 에서 권고하는 픽셀 환산 값은 아래와 같다.
- 1inch = 2.54cm = 25.4mm = 96px
- 1mm = 약 3.78px
- 1px = 약 0.26mm
- 대각선 길이 6mm(22.68px) 를 만족하는 정사각형의 경우 width, height 값은 약 4.3mm 이다.
- 이를 픽셀로 환산하면 가로세로 16~17px 정도 된다.
- 클릭 가능한 영역 - 대각선 길이 6mm 이상
- 여백
- 테두리 안쪽으로 최소 1픽셀 이상의 여유
- 기대효과
- 손 떨림이 있는 사용자, 시각장애인도 쉽게 웹사이트를 이용할 수 있다.
시간 제한이 있는 콘텐츠(3분 내 보안코드 입력 등)는 응답시간을 조절할 수 있어야 한다.
- 시간 제한이 있는 콘텐츠는 가급적 포함하지 않는 것이 바람직하다.
- 지적장애, 학습장애가 있는 사람들은 문서를 읽고 이해하는 시간이 더 많이 필요할 수 있다.
- 보안 등의 이유로 반드시 필요한 경우 이를 회피할 수 있는 수단을 제공해야 한다.
- 시간 연장 기능 제공
자동으로 변경되는 콘텐츠(캐로셀, 롤링 콘텐츠)는 움직임을 제어할 수 있어야 한다.
- 장애인 사용자는 반응속도가 느리기 때문에, 뭔가 이용 하려고 하면 넘어가버려서 이용이 어려울 수 있다.
- 정지 기능 뿐 아니라 이전/다음 버튼도 제공하면 좋다.
- 마우스를 올리거나 포커스가 되어 있을 때 롤링 콘텐츠는 정지 되어야 한다.
- 하지만 호버, 포커스시 정지 보다는, 명확하게 정지/다음/이전 버튼을 제공하는게 제일 좋다.
초당 3~50회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다.
- 특정 사용자에게 발작을 일으킬 수 있다.
- 광과민성발작증후군
- 일본에서 다수의 아이들이 발작을 일으킨 사례가 있음.
- 주의 집중이 어려운 사람의 경우 집중도가 떨어질 수 있다.
- 불가피한 경우 게임/영상 콘텐츠 등을 시작하기 전에 발작에 대한 사전 경고를 꼭 해줘야 한다.
키보드 사용시, 콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다.
- 메뉴 등과 같은 반복 영역을 바로 건너뛰어 핵심 영역으로 직접 이동할 수 있는 수단을 제공해야 한다.
- 페이지 최상단(GNB등)에
본문 바로가기
,주메뉴 바로가기
등의 버튼 제공 - 반복되는 기능이 없는 경우는 제공하지 않아도 된다.
페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다.
- 각 페이지는 유일하고 서로 다른 페이지 제목을 가져야 한다.
- title 태그, HTML title 속성
- 동일한 페이지에 포함된 모든 프레임은 해당 프레임만의 유일하고 서로 다른 프레임 제목을 가져야 한다. (요새는 iframe 을 잘 안쓴다.)
- 제목은 간단명료해야 하며, 해당 페이지, 프레임, 콘텐츠 블록을 유추할 수 있도록 제공해야 한다.
- 기대효과
- 스크린 리더 사용시, 제목 정보로 내가 필요한 콘텐츠인지 아닌지 판단해서 스킵할 수 있다.
- 페이지 제목
- 탭 제목도 포함해서, 서로 url이 다르다면 유니크한 페이지 제목을 가져야 한다.
- 위치 정보(breadcrumb)를 제공하는 경우 순서에 맞게 제목을 제공한다.
- 역순, 정순 둘다 옳으므로 일관성 있게, 맥락에 맞게 제공한다.
- 프레임 제목
- iframe 등 프레임 요소를 쓰게 되면 본문의 영역과는 별개의 콘텐츠로 인식 되므로 스킵할지 아닐지 결정하기 위해 제목을 지정해줘야 한다.
내용 없음 - 개발자 사용 용도
라고 표시해주는 것도 중요하다.
- 콘텐츠 블록
- 본문 내 제목 요소들
- 제목 요소들은 반드시 h 태그를 사용한다.
- h 태그는 스크린리더에서 책갈피, 목차 등으로 사용하기 용이하다.
링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.
- 링크텍스트 → 기능, 액션, 실행
- 스크린 리더 사용자의 경우 주변 맥락을 통해 링크를 유추하고 실행해야 한다.
- 링크를 클릭했을 때 무슨 일이 벌어질 것인지 예측할 수 있어야 한다.
- 준수사례
- 페이지를 표기할 때
1
처럼 숫자만 표기하지 말고웹툰 14페이지 중 1 페이지
처럼 명확히 제공한다. 자세히보기
만 표기하지 말고진료시간 자세히보기
처럼 표기하여 링크의 용도와 목적을 명확히 제공한다.
- 페이지를 표기할 때
- title 속성 사용
- 텍스트 정보를 노출하고 싶지 않다면 title 속성에 자세한 정보를 담을 수 있다.
- e.g.
더보기
title="간행물자료실"
웹페이지에서 주로 사용하는 기본 언어를 정확히 명시해야 한다.
- 스크린리더, 점역프로그램 등 보조기술은 기본 언어를 인식하여 자동으로 음성 모듈을 선택하거나 해당 언어에 적합한 점역 방법을 선택한다.
- 주 사용 언어는
html
태그의lang
속성에 명시한다. 한국어는ko
이다.kr
이 아님. - 부분 언어
- 외국어를 쓰는 경우 부분적으로 언어를 명시한다.
- e.g.
<span lang="zh">你好</span>
- 중국어로 표기하면
니하오
라고 읽고, - lang 표기를 하지 않으면 한국어 발음으로
이호
라고 읽게 된다.
- 중국어로 표기하면
- xhtml 은 그에 맞게 표기한다.
사용자가 의도하지 않은 기능은 실행되지 않아야 한다.
- 새 창, 초점에 의한 맥락 변화 등
- 컨트롤이나 사용자 입력은 포커스 됐을 때 의도하지 않은 기능이 자동적으로 실행되지 않아야 한다.
- 사용자의 마우스나 키보드 조작에 의해서만 실행돼야 한다.
- 사용자가 인지하지 못한 상황에서 새창, 팝업창 등이 열리지 않아야 한다.
- 브라우저에서도 새창, 새탭을 자동으로 띄우지 못하게 막고 있다는 점.
- 홈페이지 진입시 새창 팝업 금지
- 그러면 공지는 어떻게 해야합니까?
- 페이지 상단에 콘텐츠를 가리지 않는 형태의 배너
- 그러면 공지는 어떻게 해야합니까?
- 콤보박스(Select)
- 선택하는 과정과 실행하는 과정을 분리한다.
- Select 옵션 선택시 바로 실행되는 것이 아니라, 옵션 선택 후 Submit 버튼을 눌러야 실행되어야 한다.
- 새 창 열시
- 새 창을 제공하는 경우 별도로
새 창 열림
등의 텍스트 정보를 제공한다.- 스크린 리더 마다
_blank
속성을 읽지 않아주는 경우가 있다 - innerText, alt 로 주면 좋고 불가피한 경우 title 속성에 줘도 된다.
- e.g.
alt="홈페이지 바로가기(새 창)"
- 스크린 리더 마다
- 새 창을 제공하는 경우 별도로
- 초점이 자동으로 이동하지 않도록 제공
- e.g. 주민번호, 휴대폰번호 등 입력시 앞자리 입력 후 뒷자리로 이동하지 않도록 제공해야한다.
콘텐츠의 문맥은 사용자가 내용을 이해하기 쉽도록 논리적인 순서(선형 구조)로 제공해야 한다.
- 시각적으로 그리드 레이아웃을 구성하여도 맥락은 선형적으로 제공돼야 한다.
- 스타일 시트를 제거하여도 그 내용을 순서대로 읽어 문서의 의미를 이해하기 쉬워야 한다.
- 목록구조
- 카운트할 수 있는 목록 형태 -
ul
,li
로 구현 - 순서가 있는 목록 형태 -
ol
,li
로 구현- 아이콘으로 가로로 예쁘게 표현 된 경우도 리스트 태그를 사용하자.
- e.g.
민원신청
→접수
→민원수리
→완료
→결과 통보
... 이런 형태의 UI
- 카운트할 수 있는 목록 형태 -
- 계층구조
- Mega Menu, 조직도, 트리 등 계층을 갖는 구조의 경우도, 계층을 갖는
ul
,li
구조로 구현해야 한다.- 예시 - CSS 가 없는 경우 아래와 같이 나오도록.
- 메뉴1
- 서브1
- 서브2
- 메뉴2
- 서브1
- 서브2
- 메뉴1
- 예시 - CSS 가 없는 경우 아래와 같이 나오도록.
- Mega Menu, 조직도, 트리 등 계층을 갖는 구조의 경우도, 계층을 갖는
- 탭콘텐츠
- 탭 제목과 내용이 논리적 순서로 제공돼야 한다.
- 각 탭 제목 바로 다음에 다음 내용이 오는 논리적인 순서로 구현한다.
- 위 계층구조 예시와 동일하게
- 표
- 표의 제목과 내용을 서로 매칭하여 이해할 수 있도록 하나의
<table>
을 제공한다. - 하나의 표를 두개의
<table>
태그로 나누어 구현하지 않아야 한다.- e.g. 제목과 내용을 각각 분리하여 두개의 테이블 태그를 사용하는 경우
- 표의 제목과 내용을 서로 매칭하여 이해할 수 있도록 하나의
표는 이해하기 쉽고 표의 이용 방법을 예측할 수 있게 구성해야한다.
- 표는 좌표가 존재하고 2차원 정보가 되어, 어렵게 느껴질 수 있다.
- 제목셀과 내용셀이 잘 매칭돼야 한다.
- 복잡한 구조의 표 - 제목셀이 여러개인 경우
- 각 row 가 제목 → 내용 → 제목 → 내용 ... 순서의 구조인 경우
- 각 제목 셀에 id 값을 부여하고, 내용 셀의 headers 속성으로 해당 젬고 셀을 매칭하여 제공
- caption 정보 미제공
- 표에 caption 정보를 제공하지 않고 summary 속성 정보만 제공하는 경우
- summary 정보를 제거하고 caption 태그는 필수로 제공한다.
- caption 정보는
display: hidden
등올 감추기 말고, 스크린리더 사용자가 읽을 수 있게overflow: hidden
으로 제공.
사용자 입력필드에는 대응하는 레이블을 제공해야 한다.
- 스크린리더 사용자는 입력필드에 어떤 정보를 입력해야 하는지 알아야 한다.
- 제목이 있는 서식
lable
태그의for
속성과 입력필드의id
값이 일치하도록 제공
- 화면 내 제목이 없는 서식
- 검색어 입력 필드 등
input
태그에title
또는aria-lable
속성을 사용한다.
- 2개 이상의 입력 서식 (전화번호 등)
lable
태그는 1:1 로만 매칭이 가능하다.- 각 필드에
title
또는aria-lable
속성을 사용한다.- e.g.
이동전화 앞번호
,이동전화 중간번호
,이동전화 뒷번호
- e.g.
- 유사한 용도의 서식
동의합니다
체크박스의 경우- 동의 대상이 서로 다른 두개의 체크박스에 대해서는 서로 다른 더 명확한 레이블 정보를 제공한다.
- e.g.
title="전체약관 동의"
,title="홈페이지 회원 이용약관 동의"
- Select 를 포함한 검색의 경우 예시
- Select -
title="검색 구분"
- Input -
title="검색어"
- Select -
입력 오류를 정정할 수 있는 방법을 제공해야 한다.
- 애초에 입력 오류가 발생하지 않도록 사전 설명을 먼저 제공한다
- 오류가 발생한 위치와 발생하게 된 이유 등에 관한 정보를 알려주어야 한다.
- 입력값 또는 형식에 대한 사전 설명
- 사전 설명은 입력 필드보다 상단에 마크업 돼야한다.
- placeholder 로 입력에 대한 주의사항을 병행하여 제공한다.
- 만약 둘다 어렵다면 title 속성에 제공하는 방법도 있다.
- 서식 입력오류 안내
- 오류 발생시 system alert 으로 제공한다.
- 오류 알림을 화면 내 정보로만 제공하는 경우 스크린 리더 사용자는 오류 발생 여부를 인지하기 어렵다.
- 상황에 맞는 오류메시지를 제공한다. (뭘 잘못한건지)
- 오류 발생시 system alert 으로 제공한다.
- 제목과 내용이 1:N 으로 매칭되는 서식 (휴대폰번호, 이메일 등)
- 각 입력서식에 대해 구분 가능한 오류를 알려줘야한다.
- e.g. 휴대폰 뒷자리를 입력해주세요.
- e.g. 이메일 도메인 주소를 확인해주세요.
- 각 입력서식에 대해 구분 가능한 오류를 알려줘야한다.
- 보조기기가 정확히 읽을 수 있도록 마크업의 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 한다.
- 마크업 점검도구 활용 - Markup Validation Service
- 기본적으로 웹표준(W3C)을 준수해야한다.
- id 값이 중복되지 않아야 한다.
- 하나의 태그 내에 속성 값이 중복되지 않아야 한다.
- 외부 애플리케이션을 embed 하는 경우 접근성을 준수한 애플리케이션을 embed 해야한다.
- 스크린리더 등의 보조기술 지원
- 웹접근성 이해와 국가 표준 지침 소개
- AOA11Y